package com.base.web.zookeeper.service;

import com.base.web.zookeeper.model.Property;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * @Des 通过Curator操作Zookeeper
 * Created by wxq on 2018/8/21.
 */
public interface ZkService {

    /**
     * 创建节点
     * @param path 节点路径
     * @return true：成功，false：失败
     */
    boolean addNode(String path);

    /**
     * 创建节点并向节点中添加数据
     * @param path 节点路径
     * @param data 数据
     * @return true：成功，false：失败
     */
    boolean addNode(String path,Object data);

    /**
     * 更新节点中的数据
     * @param path 节点路径
     * @param data
     * @return true：成功，false：失败
     */
    boolean updateNode(String path,Object data);

    /**
     * 删除节点（包括子节点一并删除）
     * @param path 节点路径
     * @return true：成功，false：失败
     */
    boolean deleteNode(String path);

    /**
     * 查询节点下的数据
     * @param path 节点路径
     * @return 数据
     */
    String queryNodeData(String path);

    /**
     * 查询所有的节点及节点下的数据
     * @return key：path ，value：data
     */
    Map<String,String> queryAllNodeAndData();

    /**
     * 查询指定节点下的子节点及节点下的数据
     * @param path 节点路径
     * @return key：path ，value：data
     */
    Map<String,String> queryChildrenNodeAndData(String path);

    /**
     * 判断节点存在
     * @param path 节点路径
     */
    void checkNodeExists(String path);

    /**
     * 判断节点不存在
     * @param path 节点路径
     */
    void checkNodeNotExists(String path);

    /**
     * 获取指定节点下的子节点
     * @param path 节点路径
     * @return 子节点路径list
     */
    List<String> queryChildPathList(String path);

    /**
     * 获取所有节点
     * @param path 节点路径
     * @return （会将获取到的所有path装到ThreadLocal中，通过get()方法获取，该方法不提供给开发人员使用，注释方便自己记忆）
     */
    String queryAllPath(String path);

    /**
     * 将map转成实体
     * @param map
     * @return
     */
    PageInfo<Property> convertMapToModel(Map<String,String> map,Map<String, String> map1);

}
